#ifndef MMIO_H
#define MMIO_H

#include <stdint.h>

// 内存映射I/O（MMIO）读写函数：通过volatile指针访问硬件寄存器
// 关键：volatile确保编译器不优化读写操作（硬件寄存器值可能被外部修改）

// 读32位MMIO寄存器
static inline uint32_t mmio_read32(uint64_t addr) {
    return *(volatile uint32_t*)addr;
}

// 写32位MMIO寄存器
static inline void mmio_write32(uint64_t addr, uint32_t value) {
    *(volatile uint32_t*)addr = value;
}

// 读64位MMIO寄存器（如CLINT的mtime、mtimecmp）
static inline uint64_t mmio_read64(uint64_t addr) {
    return *(volatile uint64_t*)addr;
}

// 写64位MMIO寄存器
static inline void mmio_write64(uint64_t addr, uint64_t value) {
    *(volatile uint64_t*)addr = value;
}

#endif  // MMIO_H
